With the proliferation of consumer electronics, microprocessor-based systems have become a ubiquitous part of modern society. Wireless communications devices, gaming systems, music players, and a host of other electronic devices rely on microprocessors and associated systems to perform control and data processing functions.
Microprocessor systems employ a variety of techniques to enhance functionality and improve performance. Hierarchical multi-level memory systems, cache memory systems, are often used to accelerate access to data and executable code. Cache memory systems attempt to store data in hierarchical memory levels according to the frequency at which the data is accessed by the microprocessor. The levels of the cache memory are tiered such that the smallest and lowest access time memory is closest to the microprocessor. Thus, cache memory level one, usually the smallest and highest performance cache memory, ideally contains the data values most frequently accessed by the microprocessor. Less frequently accessed data may be stored in successively lower cache levels or in main memory.
While cache memories can improve performance in microprocessor systems, their use is also susceptible to an assortment of inefficiencies that mitigate their effectiveness. Cache incoherency results when the levels of a hierarchical memory system contain disparate values corresponding to the same memory address. This problem often occurs when multiple devices have access to the various system memory levels and a value modification at one memory level leaves a stale value at other memory levels. Operations causing infrequently used data to displace frequently used data in lower memory levels (i.e. memory levels nearer the processor core) are also problematic as the displaced data must be re-fetched from slower memory. Such displacement of frequently used data with infrequently used data is known as cache pollution.
Microprocessor based systems also employ special purpose hardware, hardware accelerators, outside the microprocessor core to perform data manipulations that the processor core may perform less efficiently. Floating point accelerators and graphics accelerators are two examples of hardware accelerators. Because hardware accelerators perform memory accesses, their operation may introduce deleterious side effects, such as cache incoherency or cache pollution, that tend to reduce the effectiveness of hierarchical memory systems. Additionally, some hardware accelerator implementations may unduly burden the processor with control and synchronization.